using System;
using System.Collections.Generic;

namespace SBPweb.Modules.Logging
{
	
	/// <summary>
	/// Interface for Logger wrapper
	/// </summary>
	public interface ILogManager
	{

		/// <summary>
		/// List of categories
		/// </summary>
        ICollection<string> Categories
        {
            get;
        }

		/// <summary>
		/// Fired when a log event occured 
		/// </summary>
        event EventHandler<LogWriteEventArgs> OnWrite;

        /// <summary>
        /// This method initializes the logger
        /// </summary>
		void Initialize();

		/// <summary>
		/// This method finalizes the logger
		/// </summary>
        void Terminate();

		/// <summary>
		/// A parameterized write method to log events with Critical severity
		/// </summary>
		/// <param name="sender">sender of the event</param>
		/// <param name="obj">message of the event</param>
		/// <param name="category">category to log into</param>
		void WriteCritical(object sender, object obj, string category);

		/// <summary>
		/// A parameterized write method to log events with Error severity
		/// </summary>
		/// <param name="sender">sender of the event</param>
		/// <param name="obj">message of the event</param>
		/// <param name="category">category to log into</param>
		void WriteError(object sender, object obj, string category);

		/// <summary>
		/// A parameterized write method to log events with Information severity
		/// </summary>
		/// <param name="sender">sender of the event</param>
		/// <param name="obj">message of the event</param>
		/// <param name="category">category to log into</param>
		void WriteInfo(object sender, object obj, string category);

		/// <summary>
		/// A parameterized write method to log events with default severity
		/// </summary>
		/// <param name="sender">sender of the event</param>
		/// <param name="obj">message of the event</param>
		/// <param name="category">category to log into</param>
		void Write(object sender, object obj, string category);

		/// <summary>
		/// A parameterized write method to log events with Verbode severity
		/// </summary>
		/// <param name="sender">sender of the event</param>
		/// <param name="obj">message of the event</param>
		/// <param name="category">category to log into</param>
		void WriteVerbose(object sender, object obj, string category);

		/// <summary>
		/// A parameterized write method to log events with Warning severity
		/// </summary>
		/// <param name="sender">sender of the event</param>
		/// <param name="obj">message of the event</param>
		/// <param name="category">category to log into</param>
		void WriteWarning(object sender, object obj, string category);

	}
}
